import { ref, computed } from 'vue'

export const nodeMixin = {
  props: {
    node: {
      type: Object,
      default: () => ({})
    },
    readable: {
      type: Boolean,
      default: false
    }
  },

  setup(props) {
    if (!props) return {}

    // 计算属性：获取节点类型
    const nodeType = computed(() => props.node?.type)

    // 计算属性：获取节点名称
    const nodeName = computed(() => props.node?.name)

    // 计算属性：获取节点配置
    const nodeConfig = computed(() => props.node?.properties || {})

    // 计算属性：判断是否有子节点
    const hasChildNode = computed(() => {
      return props.node?.childNode && props.node.childNode.hasOwnProperty('name')
    })

    // 计算属性：获取子节点
    const childNode = computed(() => props.node?.childNode)

    // 方法：处理节点点击事件
    const handleNodeClick = (event) => {
      if (props.readable) return
      // 触发节点点击事件
      event.stopPropagation()
    }

    // 方法：处理节点编辑
    const handleNodeEdit = () => {
      if (props.readable) return
      // 触发节点编辑事件
    }

    // 方法：处理节点删除
    const handleNodeDelete = () => {
      if (props.readable) return
      // 触发节点删除事件
    }

    // 方法：处理节点复制
    const handleNodeCopy = () => {
      if (props.readable) return
      // 触发节点复制事件
    }

    // 方法：处理节点粘贴
    const handleNodePaste = () => {
      if (props.readable) return
      // 触发节点粘贴事件
    }

    // 方法：处理节点拖拽
    const handleNodeDrag = (event) => {
      if (props.readable) return
      // 触发节点拖拽事件
    }

    // 方法：处理节点拖拽结束
    const handleNodeDragEnd = (event) => {
      if (props.readable) return
      // 触发节点拖拽结束事件
    }

    return {
      nodeType,
      nodeName,
      nodeConfig,
      hasChildNode,
      childNode,
      handleNodeClick,
      handleNodeEdit,
      handleNodeDelete,
      handleNodeCopy,
      handleNodePaste,
      handleNodeDrag,
      handleNodeDragEnd
    }
  }
} 